//package com.chen.auth.util;
//
//import com.alibaba.fastjson.JSONObject;
//import io.fusionauth.jwt.JWTUtils;
//import io.fusionauth.jwt.Signer;
//import io.fusionauth.jwt.Verifier;
//import io.fusionauth.jwt.domain.JWT;
//import io.fusionauth.jwt.hmac.HMACSigner;
//import io.fusionauth.jwt.hmac.HMACVerifier;
//import org.springframework.security.core.GrantedAuthority;
//
//import java.nio.charset.StandardCharsets;
//import java.time.ZonedDateTime;
//import java.util.Map;
//import java.util.Set;
//
///**
// * @author: cgd
// * @description:
// * @date: 2022/3/30 16:35
// * @version: 1.0
// */
//public class JwtUtils {
//    /**
//     * 生成jwt
//     *
//     * @param payload 数据主体
//     * @return
//     */
//    public String generateToken(Map<String, Object> payload) {
//        String secret = "HMAC SHA256 SECRET";
//        Signer signer = HMACSigner.newSHA256Signer(secret);
//        String issuer = "Issuer";
//        String subject = "Subject";
//        JWT jwt = new JWT()
//                .setIssuer(issuer)
//                .setExpiration(ZonedDateTime.now().plusMinutes(60))
//                .setSubject(subject)
//                .setAudience("Audience X")
//                .setNotBefore(ZonedDateTime.now().minusMinutes(60))
//                .setIssuedAt(ZonedDateTime.now())
//                .setUniqueId("jwt-id-1");
//        String encodedJwt = JWT.getEncoder().encode(jwt, signer);
//        System.out.println(encodedJwt);
//        Verifier verifier = HMACVerifier.newVerifier(secret);
//        JWT decodedJwt = JWT.getDecoder().decode(encodedJwt, verifier);
//        Assert.assertEquals(issuer, decodedJwt.issuer);
//        Assert.assertEquals(subject, decodedJwt.subject);
//
//        JWTUtils
//        JWT jwt = new JWT().;
//        //每个jwt都默认生成一个到期时间
//        payload.put("expire_time", DateUtil.current() + jwtConfig.getTokenValidityInSeconds());
//        //生成私钥
//        JWTSigner jwtSigner = JWTSignerUtil.hs256(jwtConfig.getBase64Secret().getBytes(StandardCharsets.UTF_8));
//        //生成token
//        return JWTUtil.createToken(payload, jwtSigner);
//
//    }
//
//    /**
//     * 解析jwt
//     *
//     * @param token
//     * @return
//     */
//    public JSONObject parse(String token) {
//        String secret = "HMAC SHA256 SECRET";
//        Verifier verifier = HMACVerifier.newVerifier(secret);
//        JWT decodedJwt = JWT.getDecoder().decode(token, verifier);
//        JWTUtils.
//        return JWTUtil.parseToken(token).getPayload().getClaimsJson();
//    }
//
//    /**
//     * 校验token是否正确
//     *
//     * @param token
//     * @return
//     */
//    public boolean verifyToken(String token) {
//        //先判断是否到期，再判断是否正确
//        if (expiredToken(token)) {
//            return JWTUtil.verify(token, jwtConfig.getBase64Secret().getBytes(StandardCharsets.UTF_8));
//        }
//        return false;
//    }
//
//    /**
//     * 校验token是否过期
//     *
//     * @param token
//     * @return
//     */
//    public boolean expiredToken(String token) {
//        return DateUtil.current() < getExpiredToken(token);
//    }
//
//    /**
//     * 获取token过期时间
//     *
//     * @param token
//     * @return
//     */
//    public long getExpiredToken(String token) {
//        return Long.parseLong(parse(token).get("expire_time").toString());
//    }
//
//    /**
//     * 获取登录人账号
//     *
//     * @param token
//     * @return
//     */
//    public String getUserNameToken(String token) {
//        return parse(token).get("username").toString();
//    }
//
//    /**
//     * 获取登录人角色集合
//     *
//     * @param token
//     * @return
//     */
//    public Set<GrantedAuthority> getRolesToken(String token) {
//        return (Set<GrantedAuthority>) parse(token).get("authorities");
//    }
//}
